package com.xpu.stock.controller;

import com.xpu.stock.common.domain.InnerMarketDomain;
import com.xpu.stock.common.domain.Stock4EvrDayDomain;
import com.xpu.stock.common.domain.Stock4MinuteDomain;
import com.xpu.stock.common.domain.StockUpdownDomain;
import com.xpu.stock.pojo.StockBusiness;
import com.xpu.stock.service.StockService;
import com.xpu.stock.utils.DateTimeUtil;
import com.xpu.stock.vo.resp.PageResult;
import com.xpu.stock.vo.resp.Result;
import org.apache.coyote.http11.filters.SavedRequestInputFilter;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/quot")
public class StockController {
    @Autowired
    private StockService stockService;

    @GetMapping("/stock/business/all")
    public List<StockBusiness> findAllInfo(){

        return stockService.findAll();
    }

    /**
     *
     * @return
     */
    @GetMapping("/index/all")
    public Result<List<InnerMarketDomain>> getNewAMarketInfo(){
        return stockService.getNewAMarketInfo();
    }

    /**
     * 统计沪深两个市个股最新交易数据，并按涨幅降序排序查询前十条数据
     * @return
     */
    @GetMapping("/stock/increase")
    public Result<List<StockUpdownDomain>> getStockRtInfoLimit(){
        return stockService.getStockRtInfoLimit();
    }

    /**
     * 分页查询当前页股票交易数据，按日期和涨幅降序排序
     * @param page 当前页
     * @param pageSize 页面大小
     * @return
     */
    @GetMapping("/stock/all")
    public Result<PageResult<StockUpdownDomain>> getStockInfo4Page(Integer page,Integer pageSize){
        return stockService.getStockInfo4Page( page,pageSize);
    }
    /**
     * 功能描述：沪深两市涨跌停分时行情数据查询，查询T日每分钟的涨跌停数据（T：当前股票交易日）
     * 		查询每分钟的涨停和跌停的数据的同级；
     * 		如果不在股票的交易日内，那么就统计最近的股票交易下的数据
     * 	 map:
     * 	    upList:涨停数据统计
     * 	    downList:跌停数据统计
     * @return
     */
    @GetMapping("/stock/updown/count")
    public Result<Map> getStockUpDownCount(){
        return stockService.getStockUpDownCount();
    }

    /**
     * @param response http的响应对象，可获取流对象，写出对象
     * @param page 当前页
     * @param pageSize 每页大小
     */
    @GetMapping("/stock/export")//给前端返回一个文件，文件就是一个流，所以这里借助http原生的对象
    public void stockExport(HttpServletResponse response,Integer page,Integer pageSize) {
        try {
            stockService.stockExport(response,page,pageSize);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 统计国内A股大盘T日和T-1日成交量对比功能
     * @return
     */
    @GetMapping("/stock/tradevol")
    public Result<Map> getStockTradeVol4Comparison(){
        return stockService.getStockTradeVol4Comparsion();
    }

    /**
     * 统计当前时间下（精确到分钟），股票早哥哥涨幅区间的数量
     * @return
     */
    @GetMapping("/stock/updown")
    public Result<Map> getStockUpDownRegion(){
        return stockService.getStockUpDownRegion();
    }

    /**
     * 当传入参数名称和方法参数名称不一致时，我们使用@RequestParam注解解决这个问题
     * @Param stockCode
     * @return
     */
    @GetMapping("/stock/screen/time-sharing")
    public Result<List<Stock4MinuteDomain>> stockScreenTimeSharing(@RequestParam("code") String stockCode){
        return stockService.stockScreenTimeSharing(stockCode);
    }

    /**
     *
     * @param code
     * @return
     */
    @GetMapping("/stock/screen/dkline")
    public Result<List<Stock4EvrDayDomain>> stockScreenDkLine(String code){
        return stockService.stockScreenDkLine(code);
    }


}
